<?php
/**
 * handler抽象类
 * User: 16
 * Date: 2018/9/19
 * Time: 15:47
 */
namespace chainOfResponsibility;

abstract class Handler{
    /**
     * 下一个对象
     * @var
     */
    private $_nextHandler;

    /**
     * 检验方法
     * @desc
     * @param Request $request
     * @return mixed
     * @author 16
     * @date 2018/9/19
     */
    abstract function Check(Request $request);

    /**
     * 设置责任链上的下一个对象
     * @desc
     * @param Handler $handler
     * @author 16
     * @date 2018/9/19
     */
    public function setNext(Handler $handler){
        $this->_nextHandler = $handler;
        return $handler;
    }

    public function start(Request $request){
        $this->check($request);
        //调用下一个对象
        if (!empty($this->_nextHandler)) {
            $this->_nextHandler->start($request);
        }
    }
}